package cn.feng.thinkInJava.a9_3_容器.containers.a17_08_00;

//: containers/AssociativeArray.java
// Associates keys with values.
import static net.mindview.util.Print.*;

/**理解Map
 * @author fengyu
 * @date  2015年8月9日
 * @param <K>
 * @param <V>
 */
public class AssociativeArray<K,V>
{
	private Object[][] pairs;
	private int index;
	
	public AssociativeArray(int length)
	{
		pairs=new Object[length][2];
	}
	
	public void put(K key,V value)
	{
		if(index>=pairs.length)
			throw new ArrayIndexOutOfBoundsException();
		pairs[index++]=new Object[] { key, value };
	}
	
	@SuppressWarnings("unchecked")
	public V get(K key)
	{
		for(int i=0;i<index;i++)
			if(key.equals(pairs[i][0]))
				return (V)pairs[i][1];
		return null; // Did not find key
	}
	
	public String toString()
	{
		StringBuilder result=new StringBuilder();
		for(int i=0;i<index;i++)
		{
			result.append(pairs[i][0].toString());
			result.append(" : ");
			result.append(pairs[i][1].toString());
			if(i<index-1)
				result.append("\n");
		}
		return result.toString();
	}
	
	public static void main(String[] args)
	{
		AssociativeArray<String,String> map=new AssociativeArray<String,String>(6);
		map.put("sky","blue");
		map.put("grass","green");
		map.put("ocean","dancing");
		map.put("tree","tall");
		map.put("earth","brown");
		map.put("sun","warm");
		try
		{
			map.put("extra","object"); // Past the end
		}
		catch(ArrayIndexOutOfBoundsException e)
		{
			print("Too many objects!");
		}
		print(map);
		print(map.get("ocean"));
	}
} /* Output:
Too many objects!
sky : blue
grass : green
ocean : dancing
tree : tall
earth : brown
sun : warm
dancing
*///:~
